package gsw.tool.datastructure.table;

import gsw.tool.common.ToolMath;
import gsw.tool.common.ToolShow;

/**
 * 栈
 * android源码的栈使用数组实现，这里使用链表实现
 *
 * @param <E>
 */
public class Stack<E> {
    //首节点
    LinkedTable.Node<E> first;
    //大小
    int size;

    public static void test() {
        String s = "9+(3-1+2*(2+4))/1";
        String result = ToolMath.getSuffixExpression(s);
        ToolShow.log("逆波兰表达式:" + result);
        ToolShow.log("计算结果:" + ToolMath.countSuffixExpression(result));
    }

    /**
     * 获取栈顶元素
     *
     * @return
     */
    public E get() {
        E e = first == null ? null : first.item;
        return e;
    }

    /**
     * 栈顶添加元素
     *
     * @param e
     * @return
     */
    public void add(E e) {
        LinkedTable.Node<E> node = new LinkedTable.Node<E>(e, first);
        first = node;
        size++;
    }

    /**
     * 栈顶删除元素
     *
     * @return
     */
    public E pop() {
        if (first == null) {
            return null;
        }
        E e = first.item;
        first = first.next;
        size--;
        return e;
    }
}
